#pragma once
#include "TcpServer.hpp"
#include <memory>
#include <unordered_map>

const std::string gspace = " ";
const std::string newline = "\r\n";
//接受请求的处理
class HttpRequest
{
public:
    HttpRequest()
    {}
    //序列化(不用实现,因为不会享客户端发送请求)
    std::string Serialize()
    {
        return nullptr;
    }
    //反序列化
    bool DeSerialize(const std::string& reqstr)
    {
        return true;
    }
    ~HttpRequest()
    {}
private:
    std::string req_method;//请求方法
    std::string _uri;//uri(文件路径)
    std::string _version;//HTTP版本

    std::unordered_map<std::string, std::string> _headers;//请求报头
    std::string _blackline;//空行
    std::string _text;//正文

};

//http协议
class Http
{
public:
    //构造函数(HTTP底层基于tcp)
    Http(uint16_t port):tsvrp(std::make_unique<TcpServer>(port))
    {

    }
    //http协议的接收和返回
    void HandlHttpResquest(std::shared_ptr<Socket>& sock, Inet_Addr addr)
    {
#ifndef DEBUG
#define DEBUG
        //读取请求
        std::string message;//获取读到的字符串
        sock->Recv(&message);
        std::cout << message;//输出读到的字符串
#endif
    }
    //服务器的入口
    void Start()
    {
        //将Http协议的方法绑定给TcpServer,
        //使得与客户端建立好链接后直接进入Http服务模块进行对应的请求处理
        tsvrp->Start([this](std::shared_ptr<Socket>& sock, Inet_Addr addr){
            this->HandlHttpResquest(sock, addr);
        });
    }
    ~Http()
    {

    }
private:
    std::unique_ptr<TcpServer> tsvrp;
};